/*
 * Copyright 2006-2007 the original author or authors.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.google.code.sant

import scala.collection.immutable.Map
import org.apache.tools.ant.{Target,Task}

/**
 * @author Stepan Koltsov
 */
class SantTarget (
    santProject: SantProject,
    val name: String,
    val description: String,
    val default: Boolean,
    depends: String,
    body: () => Unit)
{
  def go() { body() }
  
  def toAntTask = new Task {
    override def getProject = santProject.antProject
    override def execute() = body()
  }
  
  def toAntTarget = {
    val target = new Target
    target.addTask(toAntTask)
    target.setName(name)
    target.setDescription(description)
    if (depends.length > 0) target.setDepends(depends)
    target
  }
}

object SantTarget {
  def apply(project: SantProject, name: String, args: AntParam*)(p: => Unit) = {
    val argTuples = args.map(_.asInstanceOf[AnyAntParam].toStringString)
    val argsMap = Map(argTuples: _*)
    val default = argsMap.get("default").getOrElse("false") == "true"
    val depends = argsMap.get("depends").getOrElse("")
    val description = argsMap.get("description").getOrElse("")
    // XXX: throw if there are unused parameters
    val target = new SantTarget(project, name, description, default, depends, () => p)
    target
  }
}
